package com.huilian.iotbox.data.vo;

import com.huilian.iotbox.data.po.ExternalDeviceParamValue;
import com.huilian.iotbox.data.po.ProductParamData;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author chenqiwen
 * @CreateDate: 2021-09-02-10-37
 * @Description:
 */
@Data
public class ProductFuncVo implements Serializable {

    private Integer id;
    /**跟id一样*/
    private String key;
    /**
     * 产品Id
     */
    private Integer productId;
    /**
     * 功能名称
     */
    private String funcName;
    /**
     * 查询功能码。终端参数：10进制，数值范围 0x30-0xC8（48-200），基础参数、故障参数：16进制
     */
    private Integer queryFunCode;
    /**
     * 设置指令。终端参数：10进制，数值范围 0x30-0xC8（48-200），基础参数、故障参数：16进制
     */
    private Integer setFunCode;
    /**
     * 管理端是否显示
     */
    private Boolean visible;
    /**
     * 是否禁用
     */
    private Boolean disable;
    /**
     * 设置成功后刷新
     */
    private Boolean refreshAfterSuccess;
    /**
     * 参数类型：1、参数项，2、自定义协议
     */
    private Integer funcType;
    /**
     * 自定义协议有效参数总长度
     */
    private Integer validDataSumLength;

    // 基础参数
    private List<ProductParamDataVo> basicParamDataList;
    // 基础参数
    private List<ProductFuncVo> basicProductFuncList;

    // 终端参数
    private List<ProductFuncVo> terminalParamList;

    // 故障指令
    private ProductParamDataVo productParamDataVo;

    // 终端参数-子参数
    private List<ProductParamData> children;
    private List<ProductParamDataVo> productParamDataListVo;

    /**
     * 参数数据id
     */
    private Integer productParamDataId;
    /**
     * 参数名称
     */
    private String paramName;
    /**
     * 数据类型：1、布尔型，2、整数型，3、浮点型，4、枚举型
     */
    private Integer dataType;
    /**
     * 值类型：1、整型，2、16进制数据，3、长整形，4、float_0.1(乘10方式)，5、float_0.01(乘100方式)，4、float_0.001(乘1000方式)
     */
    private Integer valueType;
    /**
     * 开
     */
    private Integer open;
    /**
     * 关
     */
    private Integer close;
    /**
     * 数值范围，开始
     */
    private BigDecimal dataStart;
    /**
     * 数值范围，结束
     */
    private BigDecimal dataEnd;
    /**
     * 单位
     */
    private String unit;
    /**
     * 参数长度
     */
    private Integer length;
    /**
     * 默认值
     */
    private String dataDefaultValue;
    /**
     * 预留JSON数据
     */
    private String reservedJson;
    /**
     * 描述
     */
    private String description;
    private Boolean paramVisible;
    private Boolean paramDisable;
    /**
     * 某台设备的某个参数值
     */
    private BigDecimal value;
    /**
     * 格式化后的某个参数值
     */
    private String formatValue;

    private Integer productGroupId;

    private String groupName;

    private Integer type;
    private List<EnumParamVo> enumParamVoList;
    private Date updateTime;

    //设备类型id
    private Integer deviceTypeId;

    private Map<Integer, ExternalDeviceParamValue> externalDeviceParamValueMap;

    private DeviceVo deviceVo;
}
